﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MIP_Projekt2011_bjarke
{
    public class ConsoleUI
    {
        Library libraryObject = new Library();
        List<Book> TempList = new List<Book>();
        List<Book> LåneListe = new List<Book>();


        #region Console UI
        // Forskellige modes brugergrænsefladen kan tage.
        public enum Mode
        {
            Search, AutherSearch, Lån, Welcome, CreateBook, Books, NotBorrowed
        }

        public void Display(Mode mode)
        {
            switch (mode)
            {
                case Mode.CreateBook:
                    _CreateBook();
                    break;
                case Mode.Search:
                    _DisplaySearch();
                    break;
                case Mode.AutherSearch:
                    _DisplayAutherSearch();
                    break;
                case Mode.Lån:
                    _DisplayLån();
                    break;
                case Mode.Books:
                    _DisplayBooks();
                    break;
                case Mode.NotBorrowed:
                    _DisplayNotBorrowed();
                    break;
                default:
                    _DisplayWelcome();
                    break;
            }
        }

        public void _CreateBook()
        {
            // Opretter DateTime objekter til at smide i et bog-objekt.
            DateTime value1 = new DateTime(2011, 3, 1);
            DateTime value2 = new DateTime(2011, 2, 1);
            DateTime value3 = new DateTime(2011, 2, 1);
            DateTime value4 = new DateTime(2011, 7, 22);
            DateTime value7 = new DateTime(2011, 2, 15);

            // Kalder Book constructoren med 5 argumenter.
            Book senAfleveringBook = new Book("Remember to hand in on time", "Thomas Thomsen", value2, true, value1);
            Book myAwesomeBook = new Book("The Awesome Book", "Forfatter Kurt", value2, true);
            Book nybook = new Book("The Modern Book", "Anders Lund", value2, false);
            Book myNewBook = new Book("Just Another Book", "Jens Hans", value3, false);
            Book nyerbook = new Book("Brugerens valg", "Hans Hansen", value4, false);
            Book myNewerBook = new Book("Nyere version af brugerens valg", "Bjarke Carstens", value7, true, value4);

            // Tilføjer et Book objekt til listen "_books" vha. Add(item) metoden.
            libraryObject.Add(myAwesomeBook);
            libraryObject.Add(myNewBook);
            libraryObject.Add(nybook);
            libraryObject.Add(nyerbook);
            libraryObject.Add(myNewerBook);
        }

        private void _DisplayWelcome()
        {
            List<String> message = new List<string>();
            message.Add("Velkommen");
            message.Add("Vælg en funktion:");
            message.Add("Tryk Ctrl+B: Se listen over alle bøger, samt låne bøger som er hjemme.");
            message.Add("Tryk Ctrl+N: Se listen over bøger som ikke er udlånte, samt låne bøger.");
            message.Add("Tryk Ctrl+T: Søge efter titlen på bøger i databasen.");
            message.Add("Tryk Ctrl+F: Søge efter en forfatter på bøger i databasen, samt låne bøger som er hjemme.");
            message.Add("Tryk Ctrl+L: Se lånte bøger, samt aflevere bøger");
            message.Add("Tryk Ctrl+Q: Luk programmet.");

            for (int i = 0; i < message.Count; i++)
            {
                Console.WriteLine(message[i]);
            }
        }

        private void _DisplayBooks()
        {
            Console.Clear(); //Teksten i konsollen slettes.
            Console.WriteLine("Her er listen over alle bøger på biblioteket: \n");
            List<Book> allebøger = libraryObject.Books();

            for (int i = 0; i < allebøger.Count; i++)
            {
                Console.WriteLine(allebøger[i].ToString());
                Console.WriteLine();
            }
            Console.WriteLine("\nDu kan vælge at:");
            Console.WriteLine("1 - Låne bøger");
            Console.WriteLine("2 - Gå tilbage");
            Console.WriteLine("3 - Lukke programmet");
            Console.WriteLine();

            

            string input2 = Console.ReadLine();//Vi gemmer brugerens valg i en variabel
            switch (input2)
            {
                case "1":
                    List<Book> Idliste = new List<Book>();

                    Idliste = libraryObject.TilføjBogLån(TempList);

                    LåneListe = Idliste;
                    //_LinkLister();

                    libraryObject.Udlån(Idliste);

                    Console.WriteLine("Du har nu lånt: \n ");
                    for (int i = 0; i < Idliste.Count; i++)
                    {
                        Console.WriteLine(Idliste[i].ToString());
                        Console.WriteLine();
                    }

                    //for (int n = 0; n < Idliste.Count; n++)
                    //{
                    //    LåneListe = Idliste;
                    //}

                    break;

                case "2": Console.Clear();
                    _DisplayWelcome(); break;

                case "3": Environment.Exit(0); break;
     
            }
        }

        private void _DisplayNotBorrowed()
        {
            Console.Clear(); //Teksten i konsollen slettes.

            List<Book> ikkeudlånt = libraryObject.IkkeUdlåntSøgning();
            for (int i = 0; i < ikkeudlånt.Count; i++)
            {
                Console.WriteLine(ikkeudlånt[i].ToString());
                Console.WriteLine();
            }

            Console.WriteLine("\nDu kan vælge at:");
            Console.WriteLine("1 - Låne bøger");
            Console.WriteLine("2 - Gå tilbage");
            Console.WriteLine("3 - Lukke programmet");
            Console.WriteLine();

            string input2 = Console.ReadLine();//Vi gemmer brugerens valg i en variabel
            switch (input2)
            {
                case "1":
                    List<Book> Idliste = new List<Book>();
                    libraryObject.TilføjBogLån(Idliste);

                    //string input3 = Console.ReadLine();//Vi gemmer brugerens valg i en variabel

                    libraryObject.Udlån(Idliste);

                    _LinkLister();

                    Console.WriteLine("Du har nu lånt: \n ");
                    for (int i = 0; i < Idliste.Count; i++)
                    {
                        Console.WriteLine(Idliste[i].ToString());
                        Console.WriteLine();
                    }
                    break;

                case "2": Console.Clear();
                    _DisplayWelcome(); break;

                case "3": Environment.Exit(0); break;
            }
        }

        private void _LinkLister()
        {
            

            LåneListe = libraryObject.TilføjBogLån(TempList);
        }


        private void _DisplayLån()
        {
            Console.Clear(); //Teksten i konsollen slettes.
            Console.WriteLine("Bøger til aflevering: \n");

            List<Book> udlånsbøger = new List<Book>();

            udlånsbøger = LåneListe;
            
            // Har valgt at hardcode lokale objekter ind her.
            DateTime value1 = new DateTime(2011, 6, 25);
            DateTime value2 = new DateTime(2011, 5, 20);
            DateTime value5 = new DateTime(2011, 7, 25);
            DateTime value3 = new DateTime(2011, 6, 1);
            DateTime value4 = new DateTime(2011, 6, 22);
            DateTime value7 = new DateTime(2011, 6, 15);

            // Kalder Book constructoren med 5 argumenter:
            // 36 - 28 = 8 dage, 8 dage * 2 kr = 16 kr
            Book AfleveringBook = new Book("Remember to hand in on time", "Thomas Thomsen", value2, true, value1);
            // 65 - 28 = 37 dage, 37 dage * 2 kr = 74, men bliver rundet ned til 40 kr.
            Book myAwesomeBook = new Book("The Awesome Book", "Forfatter Kurt", value2, true, value5);
            // 7 dage er under 28, dvs. 0 kr
            Book myNewerBook = new Book("Nyere version af brugerens vaHanslg", "Bjarke Carstens", value7, true, value4);

            // Ialt 16 kr + 40 kr = 56 kr

            udlånsbøger.Add(AfleveringBook);
            udlånsbøger.Add(myNewerBook);
            udlånsbøger.Add(myAwesomeBook);

            for (int i = 0; i < udlånsbøger.Count; i++)
            {
                Console.WriteLine(udlånsbøger[i].ToString());
                Console.WriteLine();
            }

            int bøde = libraryObject.Aflevering(udlånsbøger);
            if (bøde == 0)
            {
                Console.WriteLine("Bøgerne er afleveret til tiden, ingen bøde at betale.");
            }
            else
            {
                Console.WriteLine("Bøgerne er afleveret for sent, der skal betales " + bøde.ToString() + "kr i bøde");
            }

            Console.WriteLine("\nDu kan vælge at:");
            Console.WriteLine("1 - Gå tilbage");
            Console.WriteLine("2 - Lukke programmet");
            Console.WriteLine();

            string input2 = Console.ReadLine();//Vi gemmer brugerens valg i en variabel
            switch (input2)
            {
                case "1": Console.Clear();
                    _DisplayWelcome();
                    break;

                case "2": Environment.Exit(0);
                    break;
            }
        }

        private void _DisplayAutherSearch()
        {
            Console.Clear(); //Teksten i konsollen slettes.

            List<Book> forfatterBøger = libraryObject.Forfattersøgning();
            for (int i = 0; i < forfatterBøger.Count; i++)
            {
                Console.WriteLine(forfatterBøger[i].ToString());
                Console.WriteLine();
            }

            Console.WriteLine("\nDu kan vælge at:");
            Console.WriteLine("1 - Låne bøger");
            Console.WriteLine("2 - Gå tilbage");
            Console.WriteLine("3 - Lukke programmet");
            Console.WriteLine();

            string input2 = Console.ReadLine();//Vi gemmer brugerens valg i en variabel
            switch (input2)
            {
                case "1":
                    List<Book> Idliste = new List<Book>();
                    libraryObject.TilføjBogLån(Idliste);

                    //string input3 = Console.ReadLine();//Vi gemmer brugerens valg i en variabel

                    libraryObject.Udlån(Idliste);

                    _LinkLister();

                    Console.WriteLine("Du har nu lånt: \n ");
                    for (int i = 0; i < Idliste.Count; i++)
                    {
                        Console.WriteLine(Idliste[i].ToString());
                        Console.WriteLine();
                    }
                    break;

                case "2": Console.Clear();
                    _DisplayWelcome(); break;

                case "3": Environment.Exit(0); break;
            }
        }

        private void _DisplaySearch()
        {
            Console.Clear(); //Teksten i konsollen slettes.

            List<Book> titelBøger2 = libraryObject.Titelsøgning();
            for (int i = 0; i < titelBøger2.Count; i++)
            {
                Console.WriteLine(titelBøger2[i].ToString());
                Console.WriteLine();
            }

            Console.WriteLine("\nDu kan vælge at:");
            Console.WriteLine("1 - Låne bøger");
            Console.WriteLine("2 - Gå tilbage");
            Console.WriteLine("3 - Lukke programmet");
            Console.WriteLine();

            string input2 = Console.ReadLine();//Vi gemmer brugerens valg i en variabel
            switch (input2)
            {
                case "1":
                    List<Book> Idliste = new List<Book>();
                    libraryObject.TilføjBogLån(Idliste);


                    //string input3 = Console.ReadLine();//Vi gemmer brugerens valg i en variabel

                    libraryObject.Udlån(Idliste);

                    _LinkLister();
                    Console.WriteLine("Du har nu lånt: \n ");
                    for (int i = 0; i < Idliste.Count; i++)
                    {
                        Console.WriteLine(Idliste[i].ToString());
                        Console.WriteLine();
                    }
                    break;

                case "2": Console.Clear();
                    _DisplayWelcome(); break;

                case "3": Environment.Exit(0); break;
            }
        }
        #endregion
    }
}
